Renaming columns in a data frame

Problem

You want to rename the columns in a data frame.

Solution

Start with a sample data frame with three columns:

d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9)
# alpha beta gamma
#     1    4     7
#     2    5     8
#     3    6     9

names(d)  
# "alpha" "beta"  "gamma"

Rename columns:

# Rename column by name: change "beta" to "two"
names(d)[names(d)=="beta"] <- "two"
# alpha two gamma
#     1   4     7
#     2   5     8
#     3   6     9

# Rename by index in names list: change third item, "gamma", to "three"
names(d)[3] <- "three"
# alpha two three
#     1   4     7
#     2   5     8
#     3   6     9

It's also possible to use R's string search-and-replace functions to rename columns. Note that the ^ and $ surrounding alpha are there to ensure that the entire string matches. Without them, if there were a column named alphabet, it would also match, and the replacement would be onebet.

names(d) <- sub("^alpha$", "one", names(d))
# one two three
#   1   4     7
#   2   5     8
#   3   6     9

# Across all columns, replace all instances of "t" with "X"
names(d) <- gsub("t", "X", names(d))
# one Xwo Xhree
#   1   4     7
#   2   5     8
#   3   6     9

# gsub() replaces all instances of the pattern in each column name.
# sub() replaces only the first instance in each column name.